// 变量的声明 var let 变量要先声明 再使用(初始化)
var a;  //声明一个变量
a = 100;  //给a变量赋值

var b, c;  //声明两个变量,中间用逗号运算符分隔
var d = 100;   //声明的同时初始化,这个等价与 var d; d = 100;

var e = 200, f;

console.log(f);  //undefined 没有初始化
console.log(a);

// ES6以后增加的,声明变量的方式
let g = 500;
let G = 600;  //变量名要区分大小写
console.log(g);
console.log(G);

// 常量的声明 const 设置之后无法修改
const PI = 3.14;
// PI = 100;
console.log(PI);

const LUO_JIN_SHENG = '100分';  //常量一般会用全大写,多个单词之间使用下划线分隔
console.log(LUO_JIN_SHENG);

// 标识符可以使用字母 下划线 数字 $ 且数字不能为首位
let $1223;
let _133sdsd;
// let 1_133sdsd;  //不能以数字开头
// let var = 100;  //不能与关键字、保留字、内置对象、全局函数重名


let luoJingSheng = 100;     //小驼峰
let LuoJingSheng = 100;     //大驼峰
let luo_jin_sheng = 200;   //下划线命名法

/* 数据类型:                     对象类型
数值   number                 对象  数组  函数
大整数  bigint
字符串  string
布尔值  Boolean
空值    null
未定义  undefined
符号    symbol
 */
let aa = 100;   //整数跟小数都是number型
let bb = 3.14;
console.log(typeof aa);  //typeof可以用来检查变量中值的类型,返回字符串
console.log(typeof (bb));

console.log(Number.MIN_VALUE);  //能表示的最小值5e-324
console.log(Number.MAX_VALUE);  //能表示的最大值1.7976931348623157e+308
console.log(Number.MAX_VALUE + 100000000000000000000000000000000000000000);  //1.7976931348623157e+308
console.log(-Number.MAX_VALUE - Number.MAX_VALUE); //比最小值小很多的时候-Infinity 大的同理


//大整数 bigint  数字后面要带一个n
let big = 99999999999999999999999999999999999999999999999999999999999999999999n;
console.log(big - 100n);  //只能与大整数之间进行计算
//let big2 = 3.14n;  // 只能用来表示整数 不能小数
let big2 = 10n;
console.log(big2 - 100n);
console.log(BigInt("100"));
//BigInt.js

//其他进制数字的表示方法
let aaa = 11;   //十进制
let bbb = 0b100;   //二进制 0b开头
let ccc = 0o100;   //八进制 0o开头
let ddd = 0x100;   //十六进制 0x开头
console.log(aaa, bbb, ccc, ddd);

// 字符串 引号必须要对应起来
console.log("luojin'sheng");
console.log('luojin"sheng');
console.log('luo\"jin\'sheng');  // 转义字符:\
console.log('10\\0');
console.log('@#￥@%￥#……￥%&%……%*&……');
console.log('xiao\tjianbang');  // \t 制表符 相当于tab键
console.log('luo\tjin\nsheng');  // \n 换行符
console.log('luojinsheng\
    luoinsheng\
    luojinshengluojinsheng');  // \表示另起一行
//模板字符串
console.log(`luo
jin
sheng`);

let name = "luojinsheng";   //可以用来嵌入变量,类似格式化字符串 ``
let age = 20;
console.log(`name=${name}, age=${age}`);


//布尔值 Boolean
console.log(true);
console.log(false);

//未定义 undefined
let un = undefined;
console.log(un);

//空值 null
let bbbb = 100;
console.log(bbbb);
bbbb = null;
console.log(bbbb);

console.log(typeof 100);
console.log(typeof 100n);
console.log(typeof "luojinsheng");
console.log(typeof true);
console.log(typeof undefined);
console.log(typeof null);  //null后面啥都没有 历史遗留bug

console.log(true.toString());
let number1 = 200;
console.log(number1.toString());

//符号 symbol 用来创建一个唯一标识
let s1 = Symbol();
let s2 = Symbol();
console.log(s1, typeof s1);
console.log(s2, typeof s2);
console.log(s1 === s2);
let name1 = Symbol('name')
let name2 = Symbol('name')
console.log(name1, typeof name1);
console.log(name2, typeof name2);
console.log(name1 === name2);

//原始类型 创建之后不能再进行改变
let aaaaa = 100;
console.log(aaaaa, typeof a);
let bbbbb = aaaaa.toString();  //不能修改
console.log(bbbbb, typeof b);
console.log(aaaaa, typeof a);
let s = String(null);
console.log(s, typeof s);


//显式类型转换->其他类型转为字符串 其他类型转为数值
let ccccc = "100";
ccccc = Number(ccccc);
console.log(ccccc, typeof ccccc);

let ddddd = parseInt("100");  //全局函数转换
console.log(ddddd, typeof ddddd);

let eeeee = parseFloat("100.8");
console.log(eeeee, typeof eeeee);

let bbbbbb = Boolean(NaN);
console.log(bbbbbb);

